/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package camada.bancodedados.daoimplemente.auxiliar;

import camada.bancodedados.conexao.Conexao;
import camada.negocio.dao.auxiliar.EstadoDAO;
import eloma.classe.auxiliar.Estado;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author KLINGER
 */
public class EstadoDAOImpl implements EstadoDAO {

    private static Connection con;
    PreparedStatement stmt = null;
    ResultSet rs = null;

    //<editor-fold desc="Metodos de Consulta">
    @Override
    //<editor-fold desc="Metodo Carregar Todos os Municipio">
    public List<Estado> carregarTodosEstados() throws Exception {

        try {

            con = Conexao.getCon();
            con.setAutoCommit(false);

            final String SQL_SCRIPT = "select * from estado order by estado";

            stmt = (PreparedStatement) Conexao.getCon().prepareStatement(SQL_SCRIPT);
            rs = stmt.executeQuery();

            con.commit();

        } catch (SQLException sqle) {
            con.rollback();
        } catch (Exception e) {
            con.rollback();
        }

        return carregarMultiplosResultados(rs);
    }
    //</editor-fold>

    @Override
    //<editor-fold desc="Metodo Carregar Estado por Identificador">
    public Estado pesquisaEstadoPorIdentificador(int idEstado) throws Exception {

        try {

            con = Conexao.getCon();
            con.setAutoCommit(false);

            final String SQL_SCRIPT = "SELECT * FROM ESTADO WHERE IDESTADO = ?";

            stmt = Conexao.getCon().prepareStatement(SQL_SCRIPT);
            stmt.setInt(1, idEstado);
            rs = stmt.executeQuery();

            con.commit();

        } catch (SQLException sqle) {
            con.rollback();
        } catch (Exception e) {
            con.rollback();
        }

        return carregarResultadoSimples(rs);

    }
     //</editor-fold>

    //</editor-fold>
    //<editor-fold desc="Metodos de Construção">
    public List<Estado> carregarMultiplosResultados(ResultSet rs) throws Exception {
        List<Estado> resultList = new ArrayList<Estado>();
        while (rs.next()) {
            Estado dto = new Estado();
            carregarVO(dto, rs);
            resultList.add(dto);
        }
        return resultList;
    }

    private Estado carregarResultadoSimples(ResultSet rs) throws Exception {
        if (rs.next()) {
            Estado dto = new Estado();
            carregarVO(dto, rs);
            return dto;
        } else {
            return null;
        }
    }

    private void carregarVO(Estado dto, ResultSet rs) throws Exception {
        dto.setIdEstado(rs.getInt("idestado"));
        dto.setEstado(rs.getString("estado"));
        dto.setSigla(rs.getString("sigla"));
        dto.setPercentualIcms(rs.getInt("percentualicms"));
        dto.setCodIbge(rs.getInt("codibge"));
        dto.setStatus(rs.getString("status"));
    }

     //</editor-fold>      
}
